// 通讯录
// struct info 
// {
//     char Name[20];
//     char tele[20];
// }

// struct Teleinfo
// {
//     info tele[20];
//     int size;
// }
// 姓名  号码
// 1、插入新号码
// 2、删除一个号码信息
// 3、根据姓名找号码
// 4、根据号码找人
// 5、显示所有通讯录中的联系人信息
// 6、要有比较好的交互界面

#include "teleinfo.h"
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "menu.h"
// 比较函数，用于查找或删除
bool NameEqual(const Info *p, const void *name)
{
    return strcmp(p->Name, (const char *)name) == 0;
}

bool TeleEqual(const Info *p, const void *tele)
{
    return strcmp(p->tele, (const char *)tele) == 0;
}



int main()
{
    TeleInfo teleBook;
    InitTeleInfo(&teleBook);

    int choice;
    char name[20];
    char tele[20];

    do
    {
        ShowMenu();
        scanf("%d", &choice);
        getchar(); // 读取一个字符 ： 回车
        switch (choice)
        {
        case 1:
            printf("请输入姓名：");
            fgets(name, 20, stdin);   // stdin : 从标准输入读取
            name[strcspn(name, "\n")] = '\0'; // 去掉换行符
            printf("请输入电话号码：");
            fgets(tele, 20, stdin);
            tele[strcspn(tele, "\n")] = '\0';
            AddInfo(&teleBook, name, tele);
            printf("添加成功！\n");
            break;
        case 2:
            printf("请输入要删除的联系人的姓名：");
            fgets(name, 20, stdin);
            name[strcspn(name, "\n")] = '\0';
            RemoveInfo(&teleBook, name, NameEqual);
            printf("删除完成！\n");
            break;
        case 3:
            printf("请输入要查找的姓名：");
            fgets(name, 20, stdin);
            name[strcspn(name, "\n")] = '\0';
            {
                const Info *p = FindInfo(&teleBook, name, NameEqual);
                if (p)
                {
                    printf("找到联系人：\n");
                    PrintInfo(p);
                }
                else
                {
                    printf("未找到该联系人！\n");
                }
            }
            break;
        case 4:
            printf("请输入要查找的电话号码：");
            fgets(tele, 20, stdin);
            tele[strcspn(tele, "\n")] = '\0';
            {
                const Info *p = FindInfo(&teleBook, tele, TeleEqual);
                if (p)
                {
                    printf("找到联系人：\n");
                    PrintInfo(p);
                }
                else
                {
                    printf("未找到对应的联系人！\n");
                }
            }
            break;
        case 5:
            DisplayAll(&teleBook);
            break;
        case 0:
            printf("通讯录已关闭！\n");
            break;
        default:
            printf("输入有误，请重新输入！\n");
            break;
        }
    } while (choice != 0);

    return 0;
}